//app.js   这个文件是小程序启动时默认调用的文件，所以在这个文件里面判断是否有缓存，其他的页面可以通过getApp()来获取这个js文件
const request = require('./utils/request')
App({
  onLaunch: function (options) {
    this.globalData.path = options.path
    let query = options.query
    if (query.hasOwnProperty('scene')) {
      this.globalData.scene = query.scene
    }
    this.startLogin(query)
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function (res) {
        if (res.hasUpdate) {
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好，是否重启应用？',
              success: function (res) {
                if (res.confirm) {
                  updateManager.applyUpdate()
                }
              }
            })
          })
          updateManager.onUpdateFailed(function () {
            wx.showModal({
              title: '已经有新版本了哟~',
              content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~'
            })
          })
        }
      })
    } else {
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
      })
    }
    if(wx.getStorageSync('token')) {
      this.getCartNum()
    }
  
  },
  globalData: {
    path: '',
    scene: '',
    isCenter: false,
    isFirstLogin: false, // 是否第一次注册
    changePoint: false, //是否修改了全局配送地点
    cate_id: 0, //记录跳转分类页id
  },
  /**
   * 设置监听器
   */
  setWatching: function (key,method) {
    console.log('I am watching now '+key);
      let obj = this.globalData;
      //加个前缀生成隐藏变量，防止死循环发生
      let ori = obj[key];   //obj[key]这个不能放在Object.defineProperty里

      if (ori){    //处理已经声明的变量，绑定处理
          method(ori);
      }
      Object.defineProperty(obj, key, {
          configurable: true,
          enumerable: true,
          set: function (value) {
              // console.log('setting ' + key+'  value ',value);
              this['__' + key] = value;
              method(value);    //数据有变化的时候回调函数，实现同步功能
          },
          get: function () {
              console.log('getting ' + key+'  value ');
              if (typeof this['__' + key] == 'undefined'){
                  if(ori){
                      //这里读取数据的时候隐藏变量和 globalData设置不一样，所以要做同步处理
                      this['__' + key] = ori;
                      return ori;
                  }else{
                      return undefined;
                  }
              }else{
                  return this['__' + key];
              }
          }
      })
  },
  startLogin(query){
    let _this = this
    wx.login({
      success (res) {
        if (res.code) {
          //发起网络请求
          request._post('/api?method=user.checkuserlogin', {
            code: res.code
          }, 'noload').then(res => {
             let info = res.data
             if(info.template_ids && info.template_ids.length>0){
              _this.subscribeMessage(info.template_ids)
             }
             if(!info.user_id){
               wx.navigateTo({
                 url: '/pages/login/login?scene='+_this.globalData.scene,
               })
             }else{
              wx.setStorage({
                key: 'token',
                data: info.token,
                success:function(){
                  _this.getUserInfo()
                }
              })
              // console.log(_this.globalData.path)
              if(_this.globalData.path.includes('product-details')){
                let id = query.id
                wx.navigateTo({
                  url: _this.globalData.path+'?id='+id,
                })
              }else{
                wx.removeStorageSync('cartList')
                wx.switchTab({
                  url: '/pages/index/index',
                })
              }
             }
          }).catch((err)=>{
            // console.log(err)
            wx.reLaunch({
              url: '/pages/login/login?scene='+_this.globalData.scene,
            })
          })
        } else {
          console.log('登录失败！' + res.errMsg)
          wx.reLaunch({
            url: '/pages/login/login?scene='+_this.globalData.scene,
          })
        }
      }
    })
  },
  subscribeMessage(code) {
    // 获取下发权限，withSubscriptions获取用户是否打开订阅消息总开关。后面我们需要获取用户是否同意总是同意消息推送。所以这里要给它设置为true 。
    wx.getSetting({
        withSubscriptions: true, //这里设置为true,下面才会返回mainSwitch
        success: function (res) {
            // 调起授权界面弹窗
            if (res.subscriptionsSetting.mainSwitch) { //用户打开了订阅消息总开关
              if (res.subscriptionsSetting.itemSettings) { // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
                let moIdState = res.subscriptionsSetting.itemSettings[code[0]]; // 用户同意的消息模板id
                if (moIdState === 'accept') {
                  console.log('接受了消息推送');
                } else if (moIdState === 'reject') {
                  console.log('拒绝了消息推送');
                  wx.showModal({
                    title: '提示',
                    content: '请先开启订阅消息，以便及时获取最新消息',
                    cancelColor: '#999',
                    confirmColor: '#D12B2B',
                    success: function (res) {
                        if (res.confirm) {
                           //调用订阅消息
                           wx.requestSubscribeMessage({
                            tmplIds: code,
                            success: res => {
                                let {
                                    errMsg,
                                    ...data
                                } = res;
                                console.log(data)
                                let Array = Object.entries(data)
                                let accept = Array.filter(e => e[1] == 'accept').map(item => item[0])
                                let reject = Array.filter(e => e[1] == 'reject').map(item => item[0])
                                let ban = Array.filter(e => e[1] == 'ban').map(item => item[0])
                                if (!accept.length && reject.length) { //全部拒绝
                                    console.log('你取消了订阅消息授权，将不会收到通知');
                                    wx.showToast({
                                        title: '你取消了订阅消息授权，将不会收到通知',
                                        icon: 'none',
                                        duration: 2000
                                    })
                                } else {
                                    console.log('订阅成功');
                                    console.log(code);
                                    wx.showToast({
                                        title: '订阅消息成功',
                                        icon: 'none',
                                        duration: 2000
                                    })
                                }
                            },
                            fail: err => {
                              console.log(err)
                                wx.showToast({
                                    title: '订阅消息失败',
                                    icon: 'none',
                                    duration: 2000
                                })
                            }
                          })
                        } else if (res.cancel) {
                            console.log('用户点击取消');
                        }
                    }
                  })
                } else if (moIdState === 'ban') {
                  console.log("已被后台封禁");
                }
              }else{
                wx.showModal({
                  title: '提示',
                  content: '请先开启订阅消息，以便及时获取最新消息',
                  cancelColor: '#999',
                  confirmColor: '#D12B2B',
                  success: function (res) {
                      if (res.confirm) {
                         //调用订阅消息
                         wx.requestSubscribeMessage({
                          tmplIds: code,
                          success: res => {
                              let {
                                  errMsg,
                                  ...data
                              } = res;
                              console.log(data)
                              let Array = Object.entries(data)
                              let accept = Array.filter(e => e[1] == 'accept').map(item => item[0])
                              let reject = Array.filter(e => e[1] == 'reject').map(item => item[0])
                              let ban = Array.filter(e => e[1] == 'ban').map(item => item[0])
                              if (!accept.length && reject.length) { //全部拒绝
                                  console.log('你取消了订阅消息授权，将不会收到通知');
                                  wx.showToast({
                                      title: '你取消了订阅消息授权，将不会收到通知',
                                      icon: 'none',
                                      duration: 2000
                                  })
                              } else {
                                  console.log('订阅成功');
                                  console.log(code);
                                  wx.showToast({
                                      title: '订阅消息成功',
                                      icon: 'none',
                                      duration: 2000
                                  })
                              }
                          },
                          fail: err => {
                            console.log(err)
                              wx.showToast({
                                  title: '订阅消息失败',
                                  icon: 'none',
                                  duration: 2000
                              })
                          }
                        })
                      } else if (res.cancel) {
                          console.log('用户点击取消');
                      }
                  }
                })
              }
                // if (wx.requestSubscribeMessage) {
                //   wx.showModal({
                //     title: '提示',
                //     content: '请先开启订阅消息，以便及时获取最新消息',
                //     cancelColor: '#999',
                //     confirmColor: '#D12B2B',
                //     success: function (res) {
                //         if (res.confirm) {
                //            //调用订阅消息
                //            wx.requestSubscribeMessage({
                //             tmplIds: code,
                //             success: res => {
                //                 let {
                //                     errMsg,
                //                     ...data
                //                 } = res;
                //                 console.log(data)
                //                 let Array = Object.entries(data)
                //                 let accept = Array.filter(e => e[1] == 'accept').map(item => item[0])
                //                 let reject = Array.filter(e => e[1] == 'reject').map(item => item[0])
                //                 let ban = Array.filter(e => e[1] == 'ban').map(item => item[0])
                //                 if (!accept.length && reject.length) { //全部拒绝
                //                     console.log('你取消了订阅消息授权，将不会收到通知');
                //                     wx.showToast({
                //                         title: '你取消了订阅消息授权，将不会收到通知',
                //                         icon: 'none',
                //                         duration: 2000
                //                     })
                //                 } else {
                //                     console.log('订阅成功');
                //                     console.log(code);
                //                     wx.showToast({
                //                         title: '订阅消息成功',
                //                         icon: 'none',
                //                         duration: 2000
                //                     })
                //                 }
                //             },
                //             fail: err => {
                //               console.log(err)
                //                 wx.showToast({
                //                     title: '订阅消息失败',
                //                     icon: 'none',
                //                     duration: 2000
                //                 })
                //             }
                //           })
                //         } else if (res.cancel) {
                //             console.log('用户点击取消');
                //         }
                //     }
                //   })
                // } else {
                //     wx.showModal({
                //         title: '提示',
                //         content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试'
                //     })
                // }
            } else {
                wx.showModal({
                    title: '提示',
                    content: '请先开启订阅消息，以便及时获取最新消息',
                    confirmText: '去设置',
                    success: res => {
                        if (res.confirm) {
                            wx.openSetting()
                        }
                    }
                })
            }
        }
    })
  },
  getUserInfo() {
    let _this = this
    request._get('/api?method=user.info', {}, 'noload').then(res => {
      wx.setStorage({
        key: 'userInfo',
        data: res.data,
      })
    })
  },
  toast(title) {
    wx.showToast({
      title,
      icon: 'none',
      duration: 1000
    })
  },
  // 复制
  copyInfo(e) {
    let data = e.currentTarget.dataset.info
    if (!data) {
      this.toast('复制内容为空')
      return
    }
    wx.setClipboardData({
      data: String(data),
      success: function (res) {
        wx.showToast({
          title: '复制成功',
          icon: 'none'
        })
      },
      fail: function (res) {
        console.log(res, '复制失败')
      }
    })
  },

  sureGetOrder(extraData){
    //拉起确认收货组件
    if (wx.openBusinessView) {
      wx.openBusinessView({
        businessType: 'weappOrderConfirm',
        extraData: {
          merchant_id: extraData.merchant_id,
          merchant_trade_no: extraData.merchant_trade_no,
          transaction_id: extraData.transaction_id
        },
        success() {
          //dosomething
            wx.showToast({
              title: '收货成功,可去全部订单里，查看！',
              icon: 'none'
            })
            return true;
        },
        fail(err) {
          console.log(err)
          //dosomething
          wx.showToast({
            title: '收货失败',
            icon: 'none'
          })
          return false;
        },
        complete() {
          //dosomething
          wx.showToast({
            title: '收货成功,可去全部订单里，查看！',
            icon: 'none'
          })
          return true;
        }
      });
    } else {
      //引导用户升级微信版本
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
      })
    }
  },
  // 处理猜你喜欢-6条一组
  delLikeGoods(datas, num) {
    var chunk = num; //num份等分
    var len = datas.length;
    var result = [];
    for (let i = 0; i < len; i += chunk) {
      result.push(datas.slice(i, i + chunk)) // 每10项分成一组        
    }
    return result
  },

  // 获取购物车数量
  getCartNum() {
    if(!wx.getStorageSync('token')) {
      return
    }
    request._post('api?method=goods.shoppingSum', {
      store_id: wx.getStorageSync('location') ? wx.getStorageSync('location').id : ''
    }, 'noload').then(res => {
      if (res.data) {
        wx.setTabBarBadge({ //这个方法的意思是，为小程序某一项的tabbar右上角添加文本
          index: 2, //代表哪个tabbar（从0开始）
          text: String(res.data) //显示的内容
        })
      } else {
        wx.removeTabBarBadge({
          index: 2
        })
      }

    }).catch(res => {

    })
  },
  // 发送订阅消息给商家
  sendMessage(id) {
    request._post('/api?method=order.sendmessage', {
      order_id: id
    }, 'noload').then(res => {

    })
  }
})